/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package manejadores;

import com.akcess.exception.*;
import com.akcess.vo.*;
import com.akcess.impl.*;
import com.akcess.dao.*;
import java.sql.*;
import java.util.*;

/**
 * Esta clase se utiliza para realizar las tareas relacionadas con la gestion de las Solicitudes de Reservas de los recursos,
 * como creacion, cancelado y otras de Solicitudes de Reservas.
 * @author Alejandro
 */
public class ManejadorSolicitudReserva {

    private Connection conexion = null;
    
    /**
     * Constructor de la clase que maneja la gestion de las Solicitudes de Reservas.
     * @param con Recibe como parametro una conexion a la Base de Datos.
     */
    public ManejadorSolicitudReserva(Connection con) {
        this.conexion = con;
    }

    public void CrearSolicitudReserva(Solicitudes_reservas solicitud) throws Solicitud_registroException, Solicitudes_reservasException {
        
            //Agrego a la base de datos la nueva solicitud
            Solicitudes_reservasDAOImpl manejadorSolicitud = new Solicitudes_reservasDAOImpl();
            if(solicitud.getId_ubicacion()==0)
                manejadorSolicitud.insertSinUbicacion(solicitud, this.conexion);
            else
                manejadorSolicitud.insert(solicitud, this.conexion);
            
    }
    
    /**
     * Este metodo obtiene una lista de las Solicitudes de Reservas sobre Aulas, con informacion util para las operaciones
     * de listar "Ver","Cancelar" y en general para las operaciones de Listar.
     * @return Un arreglo de tipo SolicitudReservaEstado, que contiene toda la informacion de cada solicitud.
     * @throws com.akcess.exception.Solicitudes_reservasException Lanza excepciones del tipo Solicitudes_reservasException, creada por el DAOGenerator.
     */
    public SolicitudReservaEstado[] ObtenerSolicitudesAulas() throws Solicitudes_reservasException {
        SolicitudReservaEstado[] lista = null;
        try {
            Solicitudes_reservasDAOImpl manejadorSol = new Solicitudes_reservasDAOImpl();
            lista = manejadorSol.ObtenerSolicitudesAulas(this.conexion);
        } catch (Solicitudes_reservasException ex) {
            ex.printStackTrace();
        }
        return lista;

    }
    
    /**
     * Este metodo obtiene una solicitud determinada de las Solicitudes de Reservas sobre Aulas, con informacion util para la operacion
     * de "Ver".
     * @return Un objeto de tipo SolicitudReservaEstado, que contiene toda la informacion de la solicitud.
     * @throws com.akcess.exception.Solicitudes_reservasException  Lanza excepciones del tipo Solicitudes_reservasException, creada por el DAOGenerator.
     */
    public SolicitudReservaEstado ObtenerSolicitudAula(int idSolicitud) throws Solicitudes_reservasException {
        SolicitudReservaEstado solicitud = null;
        try {
            Solicitudes_reservasDAOImpl manejadorSol = new Solicitudes_reservasDAOImpl();
            solicitud = manejadorSol.ObtenerSolicitudAula(idSolicitud, this.conexion);
        } catch (Solicitudes_reservasException ex) {
            ex.printStackTrace();
        }
        return solicitud;

    }
    
    /**
     * Este metodo obtiene una lista de las Solicitudes de Reservas sobre Salas de Maquinas, con informacion util para las operaciones
     * de listar "Ver","Cancelar" y en general para las operaciones de Listar.
     * @return Un arreglo de tipo SolicitudReservaEstado, que contiene toda la informacion de cada solicitud.
     * @throws com.akcess.exception.Solicitudes_reservasException Lanza excepciones del tipo Solicitudes_reservasException, creada por el DAOGenerator.
     */
    public SolicitudReservaEstado[] ObtenerSolicitudesSM() throws Solicitudes_reservasException {
        SolicitudReservaEstado[] lista = null;
        try {
            Solicitudes_reservasDAOImpl manejadorSol = new Solicitudes_reservasDAOImpl();
            lista = manejadorSol.ObtenerSolicitudesSM(this.conexion);
        } catch (Solicitudes_reservasException ex) {
            ex.printStackTrace();
        }
        return lista;

    }
    
    /**
     * Este metodo obtiene una solicitud determinada de las Solicitudes de Reservas sobre Salas de Maquinas, con informacion util para la operacion
     * de "Ver".
     * @return Un objeto de tipo SolicitudReservaEstado, que contiene toda la informacion de la solicitud.
     * @throws com.akcess.exception.Solicitudes_reservasException  Lanza excepciones del tipo Solicitudes_reservasException, creada por el DAOGenerator.
     */
    public SolicitudReservaEstado ObtenerSolicitudSM(int idSolicitud) throws Solicitudes_reservasException {
        SolicitudReservaEstado solicitud = null;
        try {
            Solicitudes_reservasDAOImpl manejadorSol = new Solicitudes_reservasDAOImpl();
            solicitud = manejadorSol.ObtenerSolicitudSM(idSolicitud, this.conexion);
        } catch (Solicitudes_reservasException ex) {
            ex.printStackTrace();
        }
        return solicitud;

    }
    
    /**
     * Este metodo obtiene una solicitud determinada de las Solicitudes de Reservas sobre Salas de Maquinas, con informacion util para la operacion
     * de "Ver".
     * @return Un objeto de tipo SolicitudReservaEstado, que contiene toda la informacion de la solicitud.
     * @throws com.akcess.exception.Solicitudes_reservasException  Lanza excepciones del tipo Solicitudes_reservasException, creada por el DAOGenerator.
     */
    public SolicitudReservaEstado ObtenerSolicitudRM(int idSolicitud, int tipoRM) throws Solicitudes_reservasException {
        SolicitudReservaEstado solicitud = null;
        try {
            Solicitudes_reservasDAOImpl manejadorSol = new Solicitudes_reservasDAOImpl();
            solicitud = manejadorSol.ObtenerSolicitudRM(idSolicitud, tipoRM, this.conexion);
        } catch (Solicitudes_reservasException ex) {
            ex.printStackTrace();
        }
        return solicitud;

    }
    
    /**
     * Este metodo obtiene una lista de las Solicitudes de Reservas sobre Recursos Moviles, con informacion util para las operaciones
     * de listar "Ver","Cancelar" y en general para las operaciones de Listar.
     * @return Un arreglo de tipo SolicitudReservaEstado, que contiene toda la informacion de cada solicitud.
     * @throws com.akcess.exception.Solicitudes_reservasException Lanza excepciones del tipo Solicitudes_reservasException, creada por el DAOGenerator.
     */
    public SolicitudReservaEstado[] ObtenerSolicitudesRM(int tipoRM) throws Solicitudes_reservasException {
        SolicitudReservaEstado[] lista = null;
        try {
            Solicitudes_reservasDAOImpl manejadorSol = new Solicitudes_reservasDAOImpl();
            lista = manejadorSol.ObtenerSolicitudesRM(tipoRM, this.conexion);
        } catch (Solicitudes_reservasException ex) {
            ex.printStackTrace();
        }
        return lista;

    }    

    public void AceptarSolicitud(int idSol, int idOperador) throws Solicitud_registroException, UsuariosException, Usuario_tiene_rolException, Exception {
        try {
            Solicitudes_reservasDAOImpl ManagerSol = new Solicitudes_reservasDAOImpl();
            Solicitudes_reservasPK solicitudPK = new Solicitudes_reservasPK();
            solicitudPK.setId_solic_reserva(idSol);
            Solicitudes_reservas solicitud = ManagerSol.findByPrimaryKey(solicitudPK, this.conexion);
            short estado = 1;//id del estado rechazado...
            solicitud.setId_estado(estado);
            solicitud.setId_operador(idOperador);
            ManagerSol.cambiarEstadoYOperador(solicitudPK, solicitud, this.conexion);
        } catch (Solicitudes_reservasException ex) {
            ex.printStackTrace();
        }
            

    }   

    /**
     * Este metodo realiza el rechazo de una solicitud de Reserva, mediante una actualizacion de la solicitud
     * identificada mediante el id recibido.
     * @param idSol Contiene el id de la solicitud a ser rechazada.
     * @param idOperador Contiene el id del operador que realiza la accion.
     * @throws com.akcess.exception.Solicitudes_reservasException Lanza excepciones del tipo Solicitudes_reservasException, creada por el DAOGenerator.
     */
    public void RechazarSolicitud(int idSol, int idOperador) throws Solicitudes_reservasException {
        try {
            Solicitudes_reservasDAOImpl ManagerSol = new Solicitudes_reservasDAOImpl();
            Solicitudes_reservasPK solicitudPK = new Solicitudes_reservasPK();
            solicitudPK.setId_solic_reserva(idSol);
            Solicitudes_reservas solicitud = ManagerSol.findByPrimaryKey(solicitudPK, this.conexion);
            short estado = 2;//id del estado rechazado...
            solicitud.setId_estado(estado);
            solicitud.setId_operador(idOperador);
            ManagerSol.update(solicitudPK, solicitud, this.conexion);
        } catch (Solicitudes_reservasException ex) {
            ex.printStackTrace();
        }
    }   
    
    /**
     * Este metodo realiza la anulacion de una solicitud de Reserva, mediante una actualizacion de la solicitud
     * identificada mediante el id recibido.
     * @param idSol Contiene el id de la solicitud a ser rechazada.
     * @param idOperador Contiene el id del operador que realiza la accion.
     * @throws com.akcess.exception.Solicitudes_reservasException Lanza excepciones del tipo Solicitudes_reservasException, creada por el DAOGenerator.
     */
    public void AnularSolicitud(int idSol, int idOperador) throws Solicitudes_reservasException {
        try {
            Solicitudes_reservasDAOImpl ManagerSol = new Solicitudes_reservasDAOImpl();
            Solicitudes_reservasPK solicitudPK = new Solicitudes_reservasPK();
            solicitudPK.setId_solic_reserva(idSol);
            Solicitudes_reservas solicitud = ManagerSol.findByPrimaryKey(solicitudPK, this.conexion);
            short estado = 4;//id del estado rechazado...
            solicitud.setId_estado(estado);
            solicitud.setId_operador(idOperador);
            ManagerSol.update(solicitudPK, solicitud, this.conexion);
        } catch (Solicitudes_reservasException ex) {
            ex.printStackTrace();
        }
    }   
}
